Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Эмуляция локального контекста (An6rey)
Author Message
An6rey
Участник форума



Joined: 30 Aug 2007
Posts: 69
Карма: 3
   поощрить/наказать


PostPosted: Fri Jan 18, 2008 1:02 am (написано за 6 минут 40 секунд)
   Post subject: Эмуляция локального контекста
Reply with quote

Часто используют конструкцию (function(){...})() для эмуляции локального контекста.
В свое время я использовал конструкцию
f=function{...}(), но не был удовлетворен загрязнением контекста переменной - в данном случае f.
Пробовал писать function(){...}() - но получал ошибку.
Тогда пришел к такому варианту
void function(){...}() - которым и пользуюсь. Но ни в одной серьезной библиотеке не нашел подтверждение этому коду.
Тепрерь сомневаюсь - правильно ли так кодировать? (Вобще вариант мне нравится тем, что не требует дополнительных скобок)
Back to top
View user's profile Send private message
Vizlim
Участник форума



Joined: 24 Sep 2007
Posts: 102
Карма: 16
   поощрить/наказать

Location: Киев

PostPosted: Fri Jan 18, 2008 9:12 am (спустя 8 часов 9 минут; написано за 5 минут 34 секунды)
   Post subject:
Reply with quote

An6rey,
Вот нашёл статью webscript.ru/stories/07/05/10/5470561, где предлагают использовать void function(){...}() //для вызова анонимной функции "на лету"...

function(){...} -- является оператором...
function(){...}() -- из оператора делает "анонимную" функцию...
void function(){...}() -- вызов "анонимной" функции...
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Fri Jan 18, 2008 10:30 am (спустя 1 час 17 минут; написано за 6 секунд)
   Post subject:
Reply with quote

An6rey
Чем Вам так скобки не угодили?
Back to top
View user's profile Send private message Send e-mail
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Fri Jan 18, 2008 12:02 pm (спустя 1 час 32 минуты; написано за 2 минуты 56 секунд)
   Post subject:
Reply with quote

An6rey wrote:
Тепрерь сомневаюсь - правильно ли так кодировать?
Напрасно сомневаетесь - кодировать можно так, как душе угодно. ;)
An6rey wrote:
Вобще вариант мне нравится тем, что не требует дополнительных скобок
Так ведь и в случае со скобками не требуется "дополнительного" void. ;)
Естественно, можно использовать void. Наверняка, раз Вы его выбрали, он Вам просто привычен (из другой области, т.с.). Но если посмотреть на алгоритм его работы, то становится ясно, что он будет выполнять совершенно ненужную работу:
Code (JavaScript): скопировать код в буфер обмена
void function () {}();
После того, как вызов функции возвратил что-либо, этот оператор предпримет попытку получить это значение. А зачем? С таким же успехом можно использовать и другие операторы:
Code (JavaScript): скопировать код в буфер обмена
!function () {}();
+function () {}();
Или даже так ( :) ):
Code (JavaScript): скопировать код в буфер обмена
typeof function () {}() == 'undefined';
Другое дело – оператор группировки:
Code (JavaScript): скопировать код в буфер обмена
(function () {}());
Он даже не пытается получить значение того, что находится в скобках. Одним словом – он делает все то же, что и в случае с другими операторами, но без попыток что-либо предпринять.
Back to top
View user's profile Send private message Send e-mail
An6rey
Участник форума



Joined: 30 Aug 2007
Posts: 69
Карма: 3
   поощрить/наказать


PostPosted: Fri Jan 18, 2008 8:32 pm (спустя 8 часов 29 минут; написано за 1 минуту 22 секунды)
   Post subject:
Reply with quote

Класс!. Я об этом даже не подумал. !function мнепонравиля бльше всего (Нефункция)
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Sat Jan 19, 2008 12:59 pm (спустя 16 часов 27 минут; написано за 1 минуту 51 секунду)
   Post subject:
Reply with quote

An6rey wrote:
Класс!. Я об этом даже не подумал. !function мнепонравиля бльше всего (Нефункция)
Это ведь был "антипример" (т.е. он не должен нравиться)! :)
И это не "нефункция", а логическая конвертация результата выполнения функции.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML